import { PrismaClient } from "@prisma/client";

/**
 * 全局类型声明，为开发环境下的全局变量提供类型
 */
declare global {
  var __prisma: PrismaClient | undefined;
}

/**
 * Prisma客户端实例
 * 使用单例模式确保整个应用只有一个Prisma客户端实例
 */
let prisma: PrismaClient;

if (process.env.NODE_ENV === "production") {
  prisma = new PrismaClient();
} else {
  // 在开发环境中，使用全局变量避免热重载时创建多个实例
  if (!global.__prisma) {
    global.__prisma = new PrismaClient({
      log: ["warn", "error"], // 只显示警告和错误日志
    });
  }
  prisma = global.__prisma;
}

/**
 * 测试Prisma连接
 */
export async function testPrismaConnection(): Promise<boolean> {
  try {
    await prisma.$connect();
    console.log("✅ Prisma数据库连接成功");
    return true;
  } catch (error: any) {
    console.error("❌ Prisma数据库连接失败:", error.message);
    return false;
  }
}

/**
 * 优雅关闭Prisma连接
 */
export async function disconnectPrisma(): Promise<void> {
  await prisma.$disconnect();
}

export { prisma };
export default prisma;